package com.etc.Day6;


/**
 * @Author kalista
 * @Description
 * @Date 2020/10/27  14:58
 **/
public class Test {
    public static void main(String[] args) {
        //三大特性： 封装   继承   多态
        /**
         * 封装： 隐藏了类内部具体实现，可以在不影响使用得情况下改变类得内部结果。 同时保护了数据。对外界而已他内部细节是隐藏得，
         * 暴漏给外界得只是他的访问得方法。
         *
         * 继承： 为了重用父类得代码 同时继承也为实现多态做了铺垫 为什么呢。   什么是多态？ 多态得实现机制是什么？
         *
         * 多态： 多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定，
         * 而是在程序运行期间才确定，即一个引用变量倒底会指向哪个类的实例对象，该引用变量发出的方法调用到底是哪个类中实现的方法，
         * 必须在由程序运行期间才能决定。
         *
         *
         * 我们只有在运行得时候才会知道引用变量所指向得具体实例对象。
         *
         *
         *同一个行为具有多个不i同得表现形态和能力
         *
         *
         *
         */

//        show(new Cat());
        // java 实现多态三个必须条件: 继续 重写  向上转型


        Animal a = new Cat();//向上转型

        Dog cat = (Dog) a; // 向下转型
        cat.work();

    }

    public static void show(Animal animal){
        animal.eat();

        if (animal instanceof Cat ){// 猫做事情
            Cat cat = (Cat) animal;
            cat.work();
            System.out.println("我是猫");
        }else if (animal instanceof Dog){//狗做狗得工作
            System.out.println("我是狗");
            Dog dog = (Dog) animal;
            dog.work();
        }
    }





}
